/* -*- C++ -*- */
/*===========================================================
 
 .---=||||[ B L O O D Y ]|||||=====================----------....
 |                                                              |
 |    THE  M O S T   B L O O D Y  GAME EVER!                    |
 |                                                              |
 |    bloody harvest is coming... soon,                         |
 |                                              heil Satan!     |
 !                                                              !
 .                                                              ,
  ~~~~-------------================================|||||||||==-~




 Name-Space: {core, logic, editor}
 Module: {draw, coll, scgr, ...}
 Class: <name of class>
 Last modification:  <author>, <time>

 TODO:
 <-------- todo #1 ---------->
 <-------- todo #2 ---------->
 <-------- todo #3 ---------->
        ............
 <-------- todo #n ---------->

 FIX:
 <-------- fix #1 ----------->
 <-------- fix #1 ----------->
         ..........
 <-------- fix #n ----------->




 
 
 ============================================================*/
#ifndef __core__IDraw_Header_File__
#define __core__IDraw_Header_File__

#include "common.h"
#include "core/vmath.h"

namespace core
{
	namespace draw
	{
		/**
		 * Interface for drawing. All drawable classes must implement
		 * this interface in order to be able to be drawed via 
		 * core::draw::Device object.
		 */
		class IDraw
		{
			public:
				virtual ~IDraw(){}
				/**
				 * Returns transform matrix, that transform current vertices
				 * for drawing.
				 * 
				 * @return Transformatiom matrix used to transform vertices
				 * for drawing.
				 */
				virtual const Matrix4f& getTransform() const = 0;

				/**
				 * Gets unique name of material assigned to this object.
				 * 
				 * @return Qnique name of material attached to this object.
				 */
				virtual const String& getShaderName() const =0;

				/**
				 * Invokes drawing of this object.
				 * 
				 * @note You should use core::draw::VertexBuffer (and you
				 * can also use core::draw::IndexBuffer) to do particular
				 * drawing operation.
				 */
				virtual void draw() const =0;


		};

	}
}

#endif //__core__IDraw_Header_File__



